From cee7ce97f7cf83521db30e83749c0c24ccd1fd36 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Tue, 28 Nov 2006 16:41:45 +0000 Subject: [PATCH] Clean up the DMADOM physical upper limit handling to properly honour settings in config.h. Set the upper limit for DMADOM and swiotlb allocations to be 30 bits (1G) instead of 31 bits, to allow the b44 NIC driver to work. Signed-off-by: Stephen Tweedie --- linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c | 4 ++-- xen/common/memory.c | 4 ++-- xen/include/asm-ia64/config.h | 4 +++- xen/include/asm-x86/config.h | 4 +++- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c b/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c index b100261073..be749217b1 100644 --- a/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c +++ b/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c @@ -47,8 +47,8 @@ EXPORT_SYMBOL(swiotlb); */ #define IO_TLB_SHIFT 11 -/* Width of DMA addresses in the IO TLB. 31 bits is an aacraid limitation. */ -#define IO_TLB_DMA_BITS 31 +/* Width of DMA addresses in the IO TLB. 30 bits is a b44 limitation. */ +#define IO_TLB_DMA_BITS 30 static int swiotlb_force; static char *iotlb_virt_start; diff --git a/xen/common/memory.c b/xen/common/memory.c index 33ead8e259..db7e9153f2 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -328,7 +328,7 @@ static long memory_exchange(XEN_GUEST_HANDLE(xen_memory_exchange_t) arg) (exch.out.address_bits < (get_order_from_pages(max_page) + PAGE_SHIFT)) ) { - if ( exch.out.address_bits < 31 ) + if ( exch.out.address_bits < MAX_DMADOM_BITS ) { rc = -ENOMEM; goto fail_early; @@ -541,7 +541,7 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE(void) arg) (reservation.address_bits < (get_order_from_pages(max_page) + PAGE_SHIFT)) ) { - if ( reservation.address_bits < 31 ) + if ( reservation.address_bits < MAX_DMADOM_BITS ) return start_extent; args.memflags = MEMF_dma; } diff --git a/xen/include/asm-ia64/config.h b/xen/include/asm-ia64/config.h index 05910e4310..5a07cd6d7a 100644 --- a/xen/include/asm-ia64/config.h +++ b/xen/include/asm-ia64/config.h @@ -41,7 +41,9 @@ #define CONFIG_IOSAPIC #define supervisor_mode_kernel (0) -#define MAX_DMADOM_PFN (0x7FFFFFFFUL >> PAGE_SHIFT) /* 31 addressable bits */ +#define MAX_DMADOM_BITS 30 +#define MAX_DMADOM_MASK ((1UL << MAX_DMADOM_BITS) - 1) +#define MAX_DMADOM_PFN (MAX_DMADOM_MASK >> PAGE_SHIFT) /* If PERFC is used, include privop maps. */ #ifdef PERF_COUNTERS diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h index cca215f4b2..8dedc54a67 100644 --- a/xen/include/asm-x86/config.h +++ b/xen/include/asm-x86/config.h @@ -82,7 +82,9 @@ /* Debug stack is restricted to 8kB by guard pages. */ #define DEBUG_STACK_SIZE 8192 -#define MAX_DMADOM_PFN 0x7FFFFUL /* 31 addressable bits */ +#define MAX_DMADOM_BITS 30 +#define MAX_DMADOM_MASK ((1UL << MAX_DMADOM_BITS) - 1) +#define MAX_DMADOM_PFN (MAX_DMADOM_MASK >> PAGE_SHIFT) #ifndef __ASSEMBLY__ extern unsigned long _end; /* standard ELF symbol */ -- 2.30.2